package dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Set;

import models.Jogador;

public class DAOJogador {

	public Set<Jogador> select() throws Exception {
		Set<Jogador> objs = new HashSet<Jogador>();
		try {

			String query = "select id_jogador, nome, apelido, sexo, email, senha, pontuacao from Jogador";

			Statement statement = DAOConnection.getConnection().createStatement();

			ResultSet resultSet = statement.executeQuery(query);

			while(resultSet.next()) {
				Jogador obj = new Jogador();
				obj.idJogador = resultSet.getInt(1);
				obj.nome = resultSet.getString(2);
				obj.apelido = resultSet.getString(3);
				obj.sexo = resultSet.getString(4);
				obj.email = resultSet.getString(5);
				obj.senha = resultSet.getString(6);
				obj.pontuacao = resultSet.getInt(7);
				objs.add(obj);
			}
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
		return objs; 
	}

	public Jogador select(int id) throws Exception {
		Jogador obj = null;
		Set<Jogador> objs = new HashSet<Jogador>();
		try     {

			String query = "select id_jogador, nome, apelido, sexo, email, senha, pontuacao from Jogador where id_jogador = ?";

			PreparedStatement statement = DAOConnection.getConnection().prepareStatement(query);
			statement.setInt(1, id);
			ResultSet resultSet = statement.executeQuery();

			while(resultSet.next()) {
				obj = new Jogador();
				obj.idJogador = resultSet.getInt(1);
				obj.nome = resultSet.getString(2);
				obj.apelido = resultSet.getString(3);
				obj.sexo = resultSet.getString(4);
				obj.email = resultSet.getString(5);
				obj.senha = resultSet.getString(6);
				obj.pontuacao = resultSet.getInt(7);
				objs.add(obj);
			}
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
		return obj; 
	}
	
	public Set<Jogador> selectXNome(String nome) throws Exception {
		Jogador obj = null;
		Set<Jogador> objs = new HashSet<Jogador>();
		try     {

			String query = "select id_jogador, nome, apelido, sexo, email, senha, pontuacao from Jogador where nome = ?";

			PreparedStatement statement = DAOConnection.getConnection().prepareStatement(query);
			statement.setString(1, nome);
			ResultSet resultSet = statement.executeQuery();

			while(resultSet.next()) {
				obj = new Jogador();
				obj.idJogador = resultSet.getInt(1);
				obj.nome = resultSet.getString(2);
				obj.apelido = resultSet.getString(3);
				obj.sexo = resultSet.getString(4);
				obj.email = resultSet.getString(5);
				obj.senha = resultSet.getString(6);
				obj.pontuacao = resultSet.getInt(7);
				objs.add(obj);
			}
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
		return objs; 
	}

	public Jogador autenticar(Jogador jogador) throws Exception {

		Jogador j = null;
		System.out.println("no dao: "+ jogador);

		try     {

			String query = "select id_jogador, nome, apelido, sexo, email, senha, pontuacao from Jogador where email = ? AND senha = ?";

			PreparedStatement ps = DAOConnection.getConnection().prepareStatement(query);
			ps.setString(1, jogador.email);
			ps.setString(2, jogador.senha);
			
			System.out.println(query);
			
			ResultSet resultSet = ps.executeQuery();

			if (resultSet.next()) {
				System.out.println("encontrou");
				j = new Jogador();
				j.idJogador = resultSet.getInt(1);
				j.nome = resultSet.getString(2);
				j.apelido = resultSet.getString(3);
				j.sexo = resultSet.getString(4);
				j.email = resultSet.getString(5);
				j.senha = resultSet.getString(6);
				j.pontuacao = resultSet.getInt(7);
			}
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
		return j; 
	}

	public void insert(Jogador f) throws Exception {
		System.out.println(f);
		try {
			String insert = "insert into jogador (nome, apelido, sexo, email, senha) values(?, ?, ?, ?, ?)";

			PreparedStatement statement = DAOConnection.getConnection().prepareStatement(insert);

			statement.setString(1, f.nome);
			statement.setString(2, f.apelido);
			statement.setString(3, f.sexo);
			statement.setString(4, f.email);
			statement.setString(5, f.senha);
			//statement.setInt(6, f.pontuacao);
			
			System.out.println(f);
			
			statement.executeUpdate();
		} catch(SQLException e) { 
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}

	}

	public void update(Jogador f) throws Exception {
		try {

			String update = "update jogador set nome = ?, apelido = ?, sexo = ?, email = ?, senha = ?, pontuacao = ? where id_jogador = ?";

			PreparedStatement statement = DAOConnection.getConnection().prepareStatement(update);

			statement.setString(1, f.nome);
			statement.setString(2, f.apelido);
			statement.setString(3, f.sexo);
			statement.setString(4, f.email);
			statement.setString(5, f.senha);
			statement.setInt(6, f.pontuacao);
			statement.setInt(7, f.idJogador);


			statement.executeUpdate();
		} catch(SQLException e) {
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}

	}

	public void delete(Jogador f) throws Exception {
		try {

			String delete = "delete from Jogador where id_jogador = ?";

			PreparedStatement statement = DAOConnection.getConnection().prepareStatement(delete);

			statement.setInt(1, f.idJogador);

			statement.executeUpdate();
		} catch(SQLException e) {
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
	}

	
	
	public static void main(String[] args) {
		
		Jogador j = new Jogador();
		j.nome = "Nome teste";
		j.apelido = "teste";
		j.email = "teste@mail.com";
		j.pontuacao = 0;
		j.senha = "123456";
		j.sexo = "M";
		
		DAOJogador d = new DAOJogador();
		
		try {
			d.insert(j);			
		} catch (Exception e) {
			e.printStackTrace();
		}

		
	}
	

}
